<?php

namespace App\Services;

use App\Models\Bar;
use App\Models\Post;
use App\Models\User;
use Illuminate\Pagination\LengthAwarePaginator;

class SearchService
{
    /**
     * 统一搜索（帖子、贴吧、用户）
     *
     * @param  string  $keyword  搜索关键词
     * @param  string|null  $type  搜索类型：all（全部）、posts（帖子）、bars（贴吧）、users（用户）
     * @param  int  $perPage  每页数量
     */
    public function search(string $keyword, ?string $type = 'all', int $perPage = 15): array
    {
        $results = [];

        if ($type === 'all' || $type === 'posts') {
            $results['posts'] = $this->searchPosts($keyword, $perPage);
        }

        if ($type === 'all' || $type === 'bars') {
            $results['bars'] = $this->searchBars($keyword, $perPage);
        }

        if ($type === 'all' || $type === 'users') {
            $results['users'] = $this->searchUsers($keyword, $perPage);
        }

        return $results;
    }

    /**
     * 搜索帖子
     *
     * @param  string  $keyword  搜索关键词
     * @param  int  $perPage  每页数量
     */
    public function searchPosts(string $keyword, int $perPage = 15): LengthAwarePaginator
    {
        $query = Post::with(['user', 'bar'])
            ->where(function ($q) use ($keyword) {
                $q->where('title', 'like', "%{$keyword}%")
                    ->orWhere('content', 'like', "%{$keyword}%");
            })
            ->orderBy('created_at', 'desc');

        return $query->paginate($perPage);
    }

    /**
     * 搜索贴吧
     *
     * @param  string  $keyword  搜索关键词
     * @param  int  $perPage  每页数量
     */
    public function searchBars(string $keyword, int $perPage = 15): LengthAwarePaginator
    {
        $query = Bar::with('owner')
            ->where(function ($q) use ($keyword) {
                $q->where('name', 'like', "%{$keyword}%")
                    ->orWhere('description', 'like', "%{$keyword}%");
            })
            ->orderBy('member_count', 'desc')
            ->orderBy('created_at', 'desc');

        return $query->paginate($perPage);
    }

    /**
     * 搜索用户
     *
     * @param  string  $keyword  搜索关键词
     * @param  int  $perPage  每页数量
     */
    public function searchUsers(string $keyword, int $perPage = 15): LengthAwarePaginator
    {
        $query = User::where(function ($q) use ($keyword) {
            $q->where('name', 'like', "%{$keyword}%")
                ->orWhere('nickname', 'like', "%{$keyword}%")
                ->orWhere('username', 'like', "%{$keyword}%");
        })
            ->orderBy('created_at', 'desc');

        return $query->paginate($perPage);
    }

    /**
     * 获取热门搜索关键词（可选功能）
     *
     * 注意：此功能暂未实现，后续可以通过搜索日志统计热门关键词
     *
     * @param  int  $limit  返回数量限制
     * @return array 热门关键词数组（暂时返回空数组）
     */
    public function getHotKeywords(int $limit = 10): array
    {
        // TODO: 实现热门关键词统计（可以从搜索日志中统计）
        return [];
    }
}
